package com.turing.post.selfwebservice.util;

import java.math.BigInteger;
import java.util.List;

import com.turing.post.common.util.SysOpUser;
import com.turing.post.util.PCPSApplicationException;

/**
 * 自助服务网站注册用户业务逻辑接口
 * 
 * @author 李治
 * 
 */
public interface CardHolderUserBusiness {
	/**
	 * 注册用户登录
	 * 
	 * @param webInput
	 *            日志记录对象
	 * @param cardHolderUser
	 *            注册用户
	 * @return 登录成功返回实体 登录失败返回null
	 * @throws PCPSApplicationException
	 */
	public CardHolderUser CardHolderUserLogon(CardHolderUser cardHolderUser)
			throws PCPSApplicationException;

	/**
	 * 添加注册用户
	 * 
	 * @param webInput日志记录对象
	 * @param cardHolderUser
	 *            注册用户
	 * @param cardNo
	 *            卡号
	 * @param cardPwd
	 *            卡密码
	 * @throws PCPSApplicationException
	 */
	public void insertCardHolderUser(CardHolderUser cardHolderUser,
			String cardNo, String cardPwd) throws PCPSApplicationException;

	/**
	 * 修改注册用户
	 * 
	 * @param cardHolderUser
	 *            注册用户
	 * @param webInput
	 *            日志记录对象
	 * @throws PCPSApplicationException
	 */
	public void updateCardHolderUser(CardHolderUser cardHolderUser)
			throws PCPSApplicationException;

	/**
	 * 根据注册用户主键查询注册用户信息
	 * 
	 * @param cardHolderUserId
	 *            注册用户Id
	 * @return 注册用户信息
	 */
	public CardHolderUser getCardHolderUserByCardHolderUserId(
			BigInteger cardHolderUserId);

	/**
	 * 分页查询所有注册用户
	 * 
	 * @param page
	 *            页数
	 * @return 注册用户列表
	 */
	public List<CardHolderUser> getCardHolderUsers(Integer page);

	/**
	 * 查询所有注册用户总数
	 * 
	 * @return 所有注册用户总数
	 */
	public Integer getCardHolderUsersCount();

	/**
	 * 条件分页查询所有注册用户
	 * 
	 * @param email
	 *            邮箱
	 * @param name
	 *            姓名
	 * @param idTypeId
	 *            证件类型
	 * @param idNo
	 *            证件号
	 * @param sex
	 *            性别
	 * @param status
	 *            状态
	 * @param page
	 *            页数
	 * @return 注册用户列表
	 */

	public List<CardHolderUser> getCardHolderUsersByCondition(String email,
			String name, Integer idTypeId, String idNo, String sex,
			String status, Integer page);

	/**
	 * 条件分页查询所有注册用户总数
	 * 
	 * @param email
	 *            邮箱
	 * @param name
	 *            姓名
	 * @param idTypeId
	 *            证件类型
	 * @param idNo
	 *            证件号
	 * @param sex
	 *            性别
	 * @param status
	 *            状态
	 * @return 注册用户总数
	 */
	public Integer getCardHolderUsersCountByCondition(String email,
			String name, Integer idTypeId, String idNo, String sex,
			String status);

	/**
	 * 重置注册用户密码
	 * 
	 * @param cardHolderUser
	 *            注册用户
	 * @param newPassWord
	 *            新密码
	 * @throws PCPSApplicationException
	 */
	public void changeCardHolderUserPwd(CardHolderUser cardHolderUser,
			String newPassWord) throws PCPSApplicationException;

	/**
	 * 找回密码
	 * 
	 * @param cardHolderUser
	 *            注册用户
	 * @throws PCPSApplicationException
	 */
	public void getLossPassword(CardHolderUser cardHolderUser)
			throws PCPSApplicationException;

	/**
	 * 根据注册用户ID获取注册用户关联卡列表
	 * 
	 * @param cardHolderUserId
	 *            注册用户Id
	 * @return
	 */
	List<CardHolderUserLink> getCardHolderUserLinksByCardHolderUserId(
			BigInteger cardHolderUserId);

	/**
	 * 注册用户添加关联卡
	 * 
	 * @param cardHolderUserLink
	 *            关联卡
	 * @throws PCPSApplicationException
	 */
	public void insertCardHolderUserLink(CardHolderUserLink cardHolderUserLink,
			String cardPwd) throws PCPSApplicationException;

	/**
	 * 根据卡号查询发卡商下网站登录代理用户信息
	 * 
	 * @param cardNo
	 *            卡号
	 * @return
	 */
	public SysOpUser getInternetAgentSysOpUserByCardNo(String cardNo);

	/**
	 * 根据持卡用户登录名获取持卡用户密码问题
	 * 
	 * @param logonName
	 * @return
	 */
	public CardHolderUser getCardHolderUserQuestionByLogonName(String logonName);

	/**
	 * 取消卡关联
	 * 
	 * @param cardHolderUserLink
	 */
	public void cancelCardHolderUserLink(CardHolderUserLink cardHolderUserLink)
			throws PCPSApplicationException;

}
